#include "wifi.h"
#include "main.h"
#include "socket.h"
//#include "soc/rtc_wdt.h" 

TaskHandle_t AppTaskCreate_Handle = NULL;/* 创建任务句柄 */
TaskHandle_t Wifi_Start_Task_Handle = NULL;/* WIFI启动任务句柄 */
TaskHandle_t TCP_Start_Task_Handle = NULL;/* socket创建tcp链接启动任务句柄 */
portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;/* 临界区参数 */

void app_main()
{
    BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值，默认为pdPASS */
    xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate,  /* 任务入口函数 */
                        (const char*    )"AppTaskCreate",/* 任务名字 */
                        (uint16_t       )8129,  /* 任务栈大小 */
                        (void*          )NULL,/* 任务入口函数参数 */
                        (UBaseType_t    )3, /* 任务的优先级 */
                        (TaskHandle_t*  )&AppTaskCreate_Handle);/* 任务控制块指针 */ 
  /* 启动任务调度 */           
    if(pdPASS == xReturn)
        ESP_LOGI("main_app","task_creator_begin");
    while(1)
    {
        vTaskDelay(100);
    }
}

void AppTaskCreate(void)
{
    BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值，默认为pdPASS */
    
   // taskENTER_CRITICAL(&mux);

    xReturn = xTaskCreate((TaskFunction_t )wifi_start_app,  /* 任务入口函数 */
                        (const char*    )"start_wifi",/* 任务名字 */
                        (uint16_t       )8129,  /* 任务栈大小 */
                        (void*          )NULL,/* 任务入口函数参数 */
                        (UBaseType_t    )2, /* 任务的优先级 */
                        (TaskHandle_t*  )&Wifi_Start_Task_Handle);/* 任务控制块指针 */ 
    
    if(pdPASS == xReturn)
        ESP_LOGI("main_app","wifi_begin_connecting");
    //启动时最高优先级
    
    xReturn = xTaskCreate((TaskFunction_t )socket_tcp_start_app,  /* 任务入口函数 */
                        (const char*    )"start_tcp",/* 任务名字 */
                        (uint16_t       )8129,  /* 任务栈大小 */
                        (void*          )NULL,/* 任务入口函数参数 */
                        (UBaseType_t    )1, /* 任务的优先级 */
                        (TaskHandle_t*  )&TCP_Start_Task_Handle);/* 任务控制块指针 */ 
   
    if(pdPASS == xReturn)
        ESP_LOGI("main_app","create_socket_app");
    //在没有连接到wifi之前这个任务是阻塞的，通过空闲指令将cpu让给其他任务
   
   // taskEXIT_CRITICAL(&mux);

    vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
}
